#include "main.h"
#include "mq_wrapper.h"

static mqd_t motor_data_queue; //消息队列

//初始化消息队列
void mq_wrapper_init()
{
    motor_data_queue = mq_open("/motor_data", O_WRONLY | O_NONBLOCK);
    if(motor_data_queue == -1)
    {
        printf("打开消息队列失败,请先运行data_recorder程序\n");
        exit(-1);
    }
}

/**
 * @brief 通过消息队列，让数据记录进程打开（或创建并打开）输出文件
 * 
 * @param file_name 
 * @return int 发送的字节数，-1表示错误
 */
int mq_wrapper_send_open_file_cmd(const char * file_name)
{
    //向数据记录进程发送"open 文件名"命令，让数据记录进程打开（或创建并打开）输出文件。
    char buf[50];
    sprintf(buf, "%s %s", "open", file_name);
    //printf("%s\n", buf);
    return mq_send(motor_data_queue, buf, strlen(buf) + 1, 20);
}

/**
 * @brief 通过消息队列，向数据记录进程发送数据
 * 
 * @param data 数据
 * @return int 发送的字节数，-1表示错误
 */
int mq_wrapper_send_data(const char * data)
{
    return mq_send(motor_data_queue, data, strlen(data) + 1, 20);
}

/**
 * @brief 通过消息队列，让数据记录进程关闭输出文件
 * 
 * @return int 发送的字节数，-1表示错误
 */
int mq_wrapper_send_close_file_cmd()
{
    return mq_send(motor_data_queue, "close", 6, 20);
}
